package main

import "fmt"

// 递归函数：自己调用自己

// 阶乘
// 3! = 3*2*1
// 4! =4*3*2*1

// 计算n的阶乘
func f(n uint64) uint64 {
	if n <= 1 { // 出口条件
		return 1
	}
	return n * f(n-1) // 递归调用
}

// 上台阶：可以一次走一个或者一次走两个，有N个台阶时有多少种方法
func taijie(n uint64) uint64 { // n表示跟个台阶
	if n == 1 {
		return 1 // 一个台阶只有一种走法
	} else if n == 2 {
		return 2 // 两个台阶只有两种走法
	} else {
		return taijie(n-1) + taijie(n-2) // n-1和n-2分别表示n个台阶最后一次需要一步或者两步之前的台阶数
	}
}

func main() {
	ret := f(5) // 结果120
	fmt.Println(ret)
}
